package com.sky.business.sys.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.sky.business.sys.domain.TrackTask;
import com.sky.common.enums.DispatchType;
import com.sky.common.enums.TrackStatus;

import java.util.Date;
import java.util.List;

/**
 * 追踪任务设备关联服务
 */
public interface TrackTaskService extends IService<TrackTask>{

    /**
     * 创建跟踪任务
     * @param deviceId 设备ID
     * @param trackTaskId 任务id
     * @param dispatchType 分配类型
     */
    void create(String deviceId, String trackTaskId, DispatchType dispatchType);



    /**
     * 查找指定设备列表执行的自选跟踪任务
     * @param deviceIdList 设备id列表
     * @param taskId 任务id
     * @return 跟踪任务列表
     */
    List<TrackTask> findNoCmccTaskByTaskIdNotEqualsAndDeviceIdIn(String taskId, List<String> deviceIdList);


    /**
     * 查询指定设备列表执行跟踪任务的所有记录
     * @param taskId 任务id
     * @param deviceId 设备id
     * @return 跟踪任务列表
     */
    List<TrackTask> findByTaskIdAndDeviceId(String taskId,String deviceId);



    /**
     * 根据任务id查询追踪记录
     * @param taskId 任务id
     * @param trackStatus 跟踪状态
     * @return 追踪记录列表
     */
    List<TrackTask> findByTaskIdAndStatus(String taskId,TrackStatus trackStatus);



    /**
     * 结束指定设备的跟踪
     * @param taskId 任务id
     * @param deviceId 设备id
     * @param endTime 结束时间
     */
    void endTrackByTaskIdAndDeviceId(String taskId, String deviceId, Date endTime);

    /**
     * 结束任务
     * @param trackTask 追踪任务
     * @param endTime 结束时间
     */
    void endTrack(TrackTask trackTask,Date endTime);

    /**
     * 根据追踪状态查询追踪记录
     * @param trackStatus 跟踪状态
     * @return 追踪记录列表
     */
    List<TrackTask> findByStatus(TrackStatus trackStatus);


    /**
     * 查询指定设备之外执行追踪任务的记录
     * @param taskId 任务id
     * @param deviceIdList 设备id列表
     * @return 追踪记录列表
     */
    List<TrackTask> findByTaskIdAndDeviceIdNotIn(String taskId,List<String> deviceIdList);

    /**
     * 查询指定设备执行追踪某个任务的记录
     * @param taskId 任务id
     * @param deviceIdList 设备id列表
     * @return 追踪记录列表
     */
    List<TrackTask> findByTaskIdAndDeviceIdIn(String taskId,List<String> deviceIdList);


    /**
     * 查询设备列表其他任务中的任务
     * @param taskId 任务id
     * @param deviceIdList 设备列表
     * @return 追踪记录列表
     */
    List<TrackTask>  findByTaskIdNotEqualsAndDeviceIdIn(String taskId,List<String> deviceIdList);

    /**
     * 获取同时执行多个追踪任务的设备的列表
     * @return 设备列表
     */
    List<String>  getMultiTaskingDevices();

    /**
     * 查询设备执行的所有跟踪任务
     * @param deviceId 设备id
     * @return 跟踪任务列表
     */
    List<TrackTask> findByDeviceId(String deviceId);
}
